/*
**		Retorna 1 si la inicializacion fue correcta
**		-inicializarGdt Copia directo de memoria la gdt existente hastas el 
**		limite que tiene definido en el GDTR
*/
int inicializarGdt(void);

/*		Recibe una posicion de memoria destino (dest), y una posicion de memoria
**		fuente (src), y una cantidad de chars a copiar.
**		-copyMem Copia directo de memoria, a nivel de char, una cantidad definida
**		por count.
**
*/
void copyMem(void  * dest, void  * src, int count);

/*		Recibe una posicion de memoria destino (dest), y una cantidad de chars a escribir.
**		un caracter "c" a escribir en memoria, y una cantidad "count"
**		-setMem setea desde la posicion "dest" con caracteres "c" una cantidad "count" de 
**		posiciones de memoria.
**		
**
*/
void * setMem(void * dest, char c, int count);


/*
**		Recibe un entero con el indice de descriptor que se quiere obtener, 
**		y un puntero a estructura donde quiere almacenar el descriptor.
**		-getSegment busca un segmento en particular de la tabla de gdt, y lo retorna
**		en la estructura de tipo "DESCR_SEG". Valida que el indice este dentro de los 
**		de los valores validos para la "GDT"
*/
void getSegment(int numDesc,DESCR_SEG * aux );

/*
**		Recibe una direccionBase, donde empieza el segmento que se quiere describir, un limite maximo.
**		"dpl" que vale entre 0-3, y es el nivel de privilegios del segmento.
**		"g" bit de granularidad, se setea en 1 si se quiere describir un segmento de mas de un mega.
**		"s", 0 o 1, que representa el tipo de segmento (Normal o de sistema).
**		"e", 0 o 1, si es ejecutable o no. y el indice que indica la posicion del segmento en la tabla de 		**		descriptores
*/
void cargaGdt(unsigned int dirBase,unsigned int limite, unsigned int  dpl,unsigned int s,unsigned int e, unsigned int g, int indice);
/*
**		Recibe el descriptor donde se quiere escribier, el offset dentro del mismo, "src", es la fuente de 
**		donde se quiere leer. "count" es la cantidad
**
*/
int memWrite(int dsc, unsigned int offset, char * src, int count);

int memRead(int dsc, unsigned int offset, int count);

/*
**		Recive el indice de un descriptor y un puntero a una estructura STANDART, en la cual carga todos los 		**		parametros necesarios para imprimir el descriptor indicado. 
**		Los parametros son: direccion base, direccion limite, bit G, bit A (accessed), bit E (Execute) y bit C **	**		(Confirming).
*/
void standartGdt(int ind, STANDARTGDT * aux );

#define MAXDESCGDT 200
